package com.jt.test;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.apache.ibatis.annotations.Update;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
//springBoot为了简化程序的测试,开发了@SpringBootTest
//该注解只能在测试包中使用
//作用:当程序执行@Test测试方法时,则会启动整个spring容器,之后通过@Autpwired
//从容器中获取实例化对象,之后完成业务的测试

@SpringBootTest
public class testMybatis {
    //面向接口编程
    @Autowired
    private UserMapper userMapper; //jdk的动态代理
    @Test //查询数据
    public void testInster(){
        System.out.println(userMapper.getClass());
        List<User> all = userMapper.findAll();
        for (User user : all) {
            System.out.println(user);
        }
    }
    /*@Test  //新增用户
    public void testinsert(){
        User user = new User();
        user.setId(null).setName("二哈").setAge(5).setSex("男");
        userMapper.insertUser(user);
    }
    @Test  //修改用户
    public void testupdate(){
        String oldname="二哈";
        String newname="阿拉斯加";
        String sex="男";
        userMapper.updateUser(oldname,newname,sex);
    }
    @Test  //删除用户
    public void testdelete(){
        userMapper.deleteUser(238);
    }
*/


    //查询用户的全部记录  mybstis-plus测试
    //只能用于单表查询
    @Test
    public void testFind(){
        //null 表示暂时不需要任何where条件 表示查询所有数据
        List<User> users = userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test //新增用户
    public void testinsert(){
        User user = new User();
        user.setId(128).setName("周六").setAge(17).setSex("男");
        userMapper.insertUser(user);
        System.out.println("添加成功");

    }

    @Test  //修改用户
    public void update(){
        String oldName="周六";
        String newName="周天";
        userMapper.updateByName(oldName,newName);
    }

    @Test  //删除用户
    public void delete(){
        String name="周天";
        userMapper.deleteByName(name);
        System.out.println("删除成功");
    }

    /*
    * mybatis plus 工作原理
    * 利用MP实现入库
    * 将对象转化为sql语句
    * 工作原理:
    * */
    @Test
    public void testInsert(){
        User user = new User();
        user.setId(999).setName("李元芳").setAge(17).setSex("男");
        userMapper.insert(user);
    }


    //需求:将ID=999的用户名称改为六一
    @Test
    public void updateUser(){
        User user = new User();
        user.setId(999).setName("六一儿童节");
        //set name="xxx" where id=999
        userMapper.updateById(user);
    }

    /*
    *  更新操作2:将name="六一儿童节"改为端午节
    *  参数说明:
    *       1.实体对象: 封装修改后的数据  set结构
    *       2.UpdateWrapper 修改的条件构造器
    *   sql:update demo_user set name="端午节" where name="六一儿童节"
    * */
    @Test
    public void updateUser2(){
        User user = new User();
        user.setName("端午节");
        UpdateWrapper updateWrapper =new UpdateWrapper();
        updateWrapper.eq("name", "六一儿童节");
        userMapper.update(user,updateWrapper );
    }




}